package file

import (
	"bytes"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
)

var (
	separator string // 当前系统的分隔符
	exePath   string // 程序文件所在路径
)

func init() {
	separator = string(os.PathSeparator)
	exePath = initExePath()
}

func initExePath() string {
	file, err := exec.LookPath(os.Args[0])
	if err != nil {
		return "."
	}
	path, err := filepath.Abs(file)
	if err != nil {
		return "."
	}
	i := strings.LastIndex(path, separator)
	if i < 0 {
		return "."
	}
	return string(path[0:i])
}

// Exist 判断文件是否存在
func Exist(path string) bool {
	_, err := os.Stat(path)
	if err == nil {
		return true
	}
	if os.IsNotExist(err) {
		return false
	}
	fmt.Println(err)
	return false
}

// Separator 获取当前系统文件路径分隔符
func Separator() string {
	return separator
}

// ExePath 获取当前程序文件所在路径
func ExePath() string {
	return exePath
}

// PathInExePath 获取当前程序文件所在路径下的某个文件的绝对路径
func PathInExePath(path string) string {
	strBuf := bytes.NewBufferString(ExePath())
	strBuf.WriteString(Separator())
	strBuf.WriteString(path)
	return strBuf.String()
}
